// 创建一个对象，将字符串数组转换为键值对
const mk = (list: string[]): Record<string, string> => list.reduce((prev, key) => {
    prev[key] = key;
    return prev
}, {} as Record<string, string>)

// 应用状态
export const APP_STATUS = mk([
    'NORMAL', // 正常
    'INSPECTOR', // 检查器
    'RECORDER', // 录制器
    'PLAYER' // 播放器
])

// 检查器状态
export const INSPECTOR_STATUS = mk([
    'PENDING', // 待执行
    'INSPECTING', // 执行中
    'STOPPED' // 停止
])

// 录制器状态
export const RECORDER_STATUS = mk([
    'PENDING', // 待执行
    'RECORDING', // 执行中
    'STOPPED' // 停止
])

// 播放器状态
export const PLAYER_STATUS = mk([
    'PLAYING', // 播放中
    'PAUSED', // 暂停
    'STOPPED' // 停止
])

// 播放器模式
export const PLAYER_MODE = mk([
    'TEST_CASE', // 测试用例
    'TEST_SUITE' // 测试套件
])

// 内容脚本状态
export const CONTENT_SCRIPT_STATUS = mk([
    'NORMAL', // 正常
    'RECORDING', // 录制中
    'INSPECTING', // 检查中
    'PLAYING' // 播放中
])

// 测试用例状态
export const TEST_CASE_STATUS = mk([
    'NORMAL', // 正常
    'SUCCESS', // 成功
    'ERROR', // 错误
    'ERROR_IN_SUB' // 子用例错误
])

// 最后截图文件名
export const LAST_SCREENSHOT_FILE_NAME = '__lastscreenshot'

// 最后桌面截图文件名
export const LAST_DESKTOP_SCREENSHOT_FILE_NAME = '__last_desktop_screenshot'

// 未命名ID
export const UNTITLED_ID = '__untitled__'

// Note: in Ubuntu, you have to take some delay after activating some tab, otherwise there are chances
// Chrome still think the panel is the window you want to take screenshot, and weird enough in Ubuntu,
// You can't take screenshot of tabs with 'chrome-extension://' schema, even if it's your own extension

// 截图延迟
export const SCREENSHOT_DELAY = /Linux/i.test(self.navigator.userAgent) ? 200 : 0

// 内容脚本IPC超时
export const CS_IPC_TIMEOUT = 4000

// 状态存储键
export const STATE_STORAGE_KEY = 'background_state'

// Anthropic 模型   
export const ANTHROPIC = {
    COMPUTER_USE_MODEL: 'claude-3-5-sonnet-20241022'
}
